home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
-
- use English;
-
- sub backup_and_install_properties
- {
- my $basepath = shift;
-
- # Does a properties file already exist?
- if (-e $basepath)
- {
- # Back up the user's properties file
- my $count = 1;
- while (-e "${basepath}.bu${count}")
- {
- $count++;
- }
- system("mv ${basepath} ${basepath}.bu${count}");
- }
-
- # Copy the new local.properties file into place (make it 'live')
- system("cp ${basepath}.orig ${basepath}");
- system("chmod g+rw ${basepath}");
- }
-
- sub logit
- {
- open F, ">>/tmp/postinstall.log";
- print F $_[0] . "\n";
- close F;
- }
-
- sub adduser # param1 = name of user to add, param2 = gid of user, param3 = real name of user
- {
- # Get Parameters
- my $newuser = shift;
- my $gid = shift;
- my $realname = shift;
-
- # Determine if the user already exists, and if so, what its id is
- my $id = `niutil -readprop . /users/$newuser uid 2>/dev/null`;
- chomp $id;
-
- # We want to assign a new user id in two cases: a) if the user
- # doesn't exist, or b) if the user exists but has a positive
- # user id. It was found that creating a user with a positive
- # user id was causing the 'Accounts' system preferences panel
- # to act funny.
-
- if (!$id || $id >= 500)
- {
- # If the user doesn't exist, create it and set some
- # necessary property values for it
- if (!$id)
- {
- # Create the user if it doesn't already exist
- `niutil -create . /users/$newuser`;
- `niutil -createprop . /users/$newuser passwd \"*\"`;
- `niutil -createprop . /users/$newuser expire 0`;
- `niutil -createprop . /users/$newuser gid $gid`;
- `niutil -createprop . /users/$newuser shell /usr/bin/false`;
- `niutil -createprop . /users/$newuser realname \"$realname\"`;
- `niutil -createprop . /users/$newuser change 0`;
- `niutil -createprop . /users/$newuser _writers_passwd $newuser`;
- }
-
- # Determine the first unused user number higher than 200
- $id = 200;
- while (`niutil -readprop . /users/uid=$id uid 2>/dev/null`)
- {
- $id++;
- }
-
- # Set the user's id
- `niutil -createprop . /users/$newuser uid $id`;
-
- }
-
- # Make sure that the user's 'home' is pointing to the right place, and
- # that the directory exists and is readable and writeable by the user. We
- # discovered that Quicktime needs a valid user folder because it writes
- # a preferences file (and hangs up if it can't)
- `niutil -createprop . /users/$newuser home /Users/$newuser`;
- `mkdir -p /Users/$newuser ; chown -R $newuser /Users/$newuser`;
- `chgrp -R $gid /Users/$newuser ; chmod -R u+rwX /Users/$newuser`;
-
- return $id;
- }
-
- sub addgroup # param1 = name of group to add, param2 = users to add to group
- {
- # Get Parameters
- my $newgroup = shift;
- my $users = shift;
-
- # Create the group if it doesn't already exist
- my $id = `niutil -readprop . /groups/$newgroup gid 2>/dev/null`;
- chomp $id;
- if (!$id)
- {
- # Determine the first unused group number higher than 999
- $id = 1000;
- while (`niutil -readprop . /groups/gid=$id gid 2>/dev/null`)
- {
- $id++;
- }
-
- # Create the new group entry
- `niutil -create . /groups/$newgroup`;
- `niutil -createprop . /groups/$newgroup gid $id`;
- `niutil -createprop . /groups/$newgroup passwd \"*\"`;
- `niutil -createprop . /groups/$newgroup realname \"DeBabelizer Server Admin Group\"`;
- }
-
- `niutil -createprop . /groups/$newgroup users $users`;
-
- return $id;
- }
-
- my $isUpgrade = ($ARGV[4] eq "postupgrade");
-
- # Create the 'mediarich' user and group
- my $mrgid = addgroup("mediarich", "root www mediarich $ENV{USER}");
- my $mruid = adduser("mediarich", $mrgid, "DeBabelizer Server");
-
- # Define the stuff we need to set permissions on
- my @roots = (
- "/Library/DeBabelizerServer",
- "/Applications/Equilibrium/DeBabelizerServerSetupAssistant.app"
- );
- my @startupItems = (
- "/Library/StartupItems/MediaRichMediaGen",
- "/Library/StartupItems/MediaRichSysMonitor",
- );
- my @ourdirs = (
- "/Applications/Equilibrium",
- );
- my @sysdirs = (
- "/",
- "/Library",
- "/Library/StartupItems",
- "/Applications",
- );
-
- # Set the mod flags on all our files
- foreach $r (@roots)
- {
- system("chown -R $ENV{USER} \"$r\"");
- system("chgrp -R mediarich \"$r\"");
- system("chmod -R ug+w,o-w \"$r\"");
- system("chmod -R a+rX \"$r\"");
- }
-
- # Restore the permissions on the stuff the installer screwed up (Apple bug!!!)
- foreach $d (@ourdirs)
- {
- system("chown $ENV{USER} \"$d\"");
- system("chgrp mediarich \"$d\"");
- system("chmod 775 \"$d\"");
- }
-
- open F, "</tmp/.__MR_PERMS__";
- my $line = readline F;
- my %perms = split(/,/, $line);
- close F;
- system("echo -n > /tmp/postinstall.out");
- foreach $d (@sysdirs)
- {
- my @stats = split(/:/, $perms{$d});
- system("chmod $stats[0] \"$d\"");
- system("chown $stats[1] \"$d\"");
- system("chgrp $stats[2] \"$d\"");
- }
-
- # Propagate the perms on the startup items
- my @stats = split(/:/, $perms{"/Library/StartupItems"});
- foreach $d (@startupItems)
- {
- system("chmod -R $stats[0] \"$d\"");
- system("chown -R $stats[1] \"$d\"");
- system("chgrp -R $stats[2] \"$d\"");
- }
-
- # Set the owner and setuid bit on our executables
- system("chown mediarich /Library/DeBabelizerServer/Bin/MediaEngine/MediaGen");
- system("chmod +s /Library/DeBabelizerServer/Bin/MediaEngine/MediaGen");
- system("chown mediarich /Library/DeBabelizerServer/Bin/MediaEngine/SystemMonitor");
- system("chmod +s /Library/DeBabelizerServer/Bin/MediaEngine/SystemMonitor");
-
- # Setup our special setuid root tool
- system("chown root /Library/DeBabelizerServer/Admin/Bin/Tools/MRStartStop");
- system("chmod +s //Library/DeBabelizerServer/Admin/Bin/Tools/MRStartStop");
-
- backup_and_install_properties("/Library/DeBabelizerServer/Properties/local.properties");
-
- # Do we have a mod? We won't for Debab Server
- if (-e "/Library/DeBabelizerServer/Bin/MediaEngine/mod_urltoimage.dylib")
- {
- # Install the apache mod
- my $httpdver = `httpd -v`;
- if ($httpdver =~ /(\d+)\.(\d+)\.(\d+)/)
- {
- # Decide which version of httpd we have, and therefore which filter to install
- my $filename = ($1 > 1)? "mod_urltoimage2.dylib" : "mod_urltoimage.dylib";
-
- # Decide where to install our .conf file (on OS X workstation, it's 'users', on OS X Server it's 'sites'
- my $instdir = "";
- if (-d "/etc/httpd/sites")
- {
- $instdir = "sites";
- }
- elsif (-d "/etc/httpd/users")
- {
- $instdir = "users";
- }
-
- if ($instdir)
- {
- system("echo \"LoadModule urltoimage_module \\\"/Library/DeBabelizerServer/Bin/MediaEngine/$filename\\\"\" > /etc/httpd/$instdir/mediarich.conf.orig");
- if (! -e "/etc/httpd/$instdir/mediarich.conf")
- {
- system("echo \"LoadModule urltoimage_module \\\"/Library/DeBabelizerServer/Bin/MediaEngine/$filename\\\"\" > /etc/httpd/$instdir/mediarich.conf");
- }
- }
- }
- }
-
-